package com.dkd.manage.service.impl;

import java.util.List;

import cn.hutool.core.bean.BeanUtil;
import com.dkd.common.utils.DateUtils;
import com.dkd.common.utils.SecurityUtils;
import com.dkd.manage.domain.dto.PartnerDto;
import com.dkd.manage.domain.vo.PartnerVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dkd.manage.mapper.PartnerMapper;
import com.dkd.manage.domain.po.Partner;
import com.dkd.manage.service.IPartnerService;

/**
 * 合作商管理Service业务层处理
 *
 * @author ming
 * @date 2024-10-25
 */
@Service
@RequiredArgsConstructor(onConstructor_ = {@Autowired})
public class PartnerServiceImpl implements IPartnerService {

    private final PartnerMapper partnerMapper;

    @Override
    public List<PartnerVo> selectAllPartner() {
        List<Partner> partners = partnerMapper.selectAllPartner();
        return BeanUtil.copyToList(partners, PartnerVo.class);
    }

    /**
     * 查询合作商管理
     *
     * @param id 合作商管理主键
     * @return 合作商管理
     */
    @Override
    public PartnerVo selectPartnerById(Long id) {
        Partner partner = partnerMapper.selectPartnerById(id);
        return BeanUtil.toBean(partner, PartnerVo.class);
    }

    /**
     * 查询合作商管理列表
     *
     * @param partnerDto 合作商管理
     * @return 合作商管理
     */
    @Override
    public List<PartnerVo> selectPartnerList(PartnerDto partnerDto) {
        Partner partner = BeanUtil.toBean(partnerDto, Partner.class);
        List<PartnerVo> partners = partnerMapper.selectPartnerVoList(partner);
        return partners;
    }

    /**
     * 新增合作商管理
     *
     * @param partner 合作商管理
     * @return 结果
     */
    @Override
    public int insertPartner(Partner partner) {
        partner.setCreateTime(DateUtils.getNowDate());
        // 使用Spring Security工具类，对密码进行加密
        String encrypted = SecurityUtils.encryptPassword(partner.getPassword());
        partner.setPassword(encrypted);
        return partnerMapper.insertPartner(partner);
    }

    /**
     * 修改合作商管理
     *
     * @param partnerDto 合作商管理
     * @return 结果
     */
    @Override
    public int updatePartner(PartnerDto partnerDto) {
        partnerDto.setPassword(null);
        partnerDto.setAccount(null);
        Partner partner = BeanUtil.toBean(partnerDto, Partner.class);
        partner.setUpdateTime(DateUtils.getNowDate());
        return partnerMapper.updatePartner(partner);
    }

    /**
     * 重置密码
     *
     * @param id 合作商id
     * @return 结果
     */
    @Override
    public int resetPwd(Long id) {
        String encrypted = SecurityUtils.encryptPassword("123456");
        Partner partner = Partner.builder()
                .password(encrypted)
                .id(id)
                .build();
        return partnerMapper.resetPwd(partner);
    }

    /**
     * 批量删除合作商管理
     *
     * @param ids 需要删除的合作商管理主键
     * @return 结果
     */
    @Override
    public int deletePartnerByIds(Long[] ids) {
        return partnerMapper.deletePartnerByIds(ids);
    }

    /**
     * 删除合作商管理信息
     *
     * @param id 合作商管理主键
     * @return 结果
     */
    @Override
    public int deletePartnerById(Long id) {
        return partnerMapper.deletePartnerById(id);
    }
}
